#ifndef __NA__
#define __NA__

#include <myhead.h>

//****************************************************************************************************
//**********************************************<结构体>***********************************************
struct user{char name[20];char password[20];};

//账户信息数据库
struct user_data
{
	char name[20];		//账号           name    char(20)   PRIMARY KEY NOT NULL
	char password[20];	//密码           ssword  char(20)   NOT NULL
	int C;				//客户端描述符     FP     INTEGER    DEFAULT 0
	char IP[15];		//IP地址         IP       test      DEFAULT NULL
	time_t TP;			//客户端心跳	  TP       INTEGER   DEFAULT 0
};
////用户个人数据库
struct contact_data
{
	char name[20]; //联系人、好友请求、群聊名
	int type;//1、2、3
	int message;//未读消息数量
};
//用户数据链表
struct contact_link
{
	union
	{
		int len;
		struct contact_data contact_data;
	};
	struct contact_link*tail;
	struct contact_link*next;
};
//
//****************************************************************************************************
//****************************************************************************************************



//****************************************************************************************************
//*********************************************<通信协议包>*********************************************
//
////客户端登陆数据包，服务器返回INT
struct client_login_data
{
	int type;//1:登陆  2:注册  3:强登陆
	struct user userID;
};
////数据交互部分
struct tcp_data
{
	int type;
	int size;
	char name[20];//消息源、消息目标
	/*
	1000~1999:系统请求	(1000:同步起点\同步请求  		1001:同步中  	1002：同步终点)
	2000~2999:系统请求	(2000:shell命令		2001:shell命令反馈		2002：反馈终点)
					   (2100:上传文件起点	2101:上传中				2102：上传结束)
					   (2200:下载文件起点	2201:下载中				2202：下载结束)
	1*:单人聊天请求
	*/
	char buf[4096];
};
//
//****************************************************************************************************
//****************************************************************************************************



//****************************************************************************************************
//**********************************************<服务器函数>********************************************
//
//*********************************功能函数*********************************
//初始化
int INIT_DB(sqlite3**,time_t*);
//查询
int inquire1_DB(sqlite3*,char*,int,struct user_data *);
//1:添加 2:删除 3:上线更新 4:下线更新
int edit1_DB(sqlite3*,int,struct user_data);
//回调函数1
int callback1(void*arg,int argc,char**argv,char**col);
//回调函数2
int callback2(void*arg,int argc,char**argv,char**col);
//文件上传
void upload_ser(struct user_data,struct tcp_data*);
//
//*********************************线程函数*********************************
//响应客户端主函数
void*server_TCP_fun(void*);
//数据同步线程函数
void*server_tcp_fun01(void*);
//处理shell指令线程函数
void*server_shell_fun01(void*);
//处理文件下载线程函数
void*server_shell_fun02(void*);
//
//****************************************************************************************************
//****************************************************************************************************



//****************************************************************************************************
//**********************************************<客户端函数>********************************************
//
//*********************************功能函数*********************************
//返回本机网络字节序IP
uint32_t getip(void);
//初始页面
void head_print1(int);
void head_print2(struct user,struct contact_link*,int*,struct contact_data*);
//登陆函数
void login(struct user*,int*,struct sockaddr_in);
//主页
void body(struct user,int,struct contact_link*);
//更新联系人信息函数
void update_contact(int,struct tcp_data*,struct contact_link*);
//void update_contact_pull(struct tcp_data*from_data,struct contact_link*P);
//接收消息
void read_fun(int,struct tcp_data*);

//<01>shell指令
void shell_fun(int,struct tcp_data*);
//<02>上传文件
void upload_cen(int,struct tcp_data*);
//<03>下载文件

//<04>添加好友
void add_friend_fun(int,char*,struct tcp_data*);
//<05>处理好友申请
void request_fun(int,char*,struct tcp_data*);
//单人聊天函数
void data_solo_fun(int,char*,struct tcp_data*);
//群聊
void data_group_fun(int,char*,struct tcp_data*);
//主页面
//void home(struct user*,int,struct contact_link*);
//
//
//*********************************线程函数*********************************
//读信息函数
void*client_read(void*);
//
//****************************************************************************************************
//****************************************************************************************************

#endif
